package org.baitu.zzim.util;

import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;
import org.baitu.zzim.model.User;

import java.nio.charset.StandardCharsets;
import java.security.Key;
import java.util.Date;
/**
 * @author zhangkai_a
 * @date 2025/7/2 16:01
 */

public class JwtUtil {

    // 秘钥（建议长度至少256位）
    private static final String SECRET = "your-256-bit-secret-your-256-bit-secret";
    private static final Key key = Keys.hmacShaKeyFor(SECRET.getBytes(StandardCharsets.UTF_8));
    private static final long EXPIRATION_MS = 3600_000;

    /**
     * 生成 JWT Token
     * @param user 传入用户对象（这里只用userId做示例）
     * @return JWT字符串
     */
    public static String generateToken(User user) {
        long now = System.currentTimeMillis();
        return Jwts.builder()
                .setSubject(user.getUserId())  // 用户ID放在sub字段
                .setIssuedAt(new Date(now))    // 发行时间
                .setExpiration(new Date(now + EXPIRATION_MS)) // 过期时间
                .signWith(key)                 // 用秘钥和算法签名
                .compact();
    }

    /**
     * 解析 JWT Token，拿到用户ID
     * @param token JWT字符串
     * @return userId 或 null
     */
    public static String parseUserId(String token) {
        try {
            Claims claims = Jwts.parserBuilder()
                    .setSigningKey(key)
                    .build()
                    .parseClaimsJws(token)
                    .getBody();
            return claims.getSubject();
        } catch (JwtException e) {
            // token无效：过期、篡改、格式错误等
            return null;
        }
    }

    /**
     * 验证Token有效性
     * @param token JWT字符串
     * @return 是否有效
     */
    public static boolean validateToken(String token) {
        return parseUserId(token) != null;
    }



    public static void main(String[] args) throws InterruptedException {
//        // 创建两个用户
        User user1 = new User("userA");
        User user2 = new User("userB");
        User user3 = new User("userC");
//
//        // 为每个用户生成JWT
        String token1 = JwtUtil.generateToken(user1);
        String token2 = JwtUtil.generateToken(user2);
        String token3 = JwtUtil.generateToken(user3);
//
        System.out.println("用户1的Token: " + token1);
        System.out.println("用户2的Token: " + token2);
        System.out.println("用户3的Token: " + token3);

        // 验证Token有效性
        System.out.println("\n开始验证Token...");

        boolean valid1 = JwtUtil.validateToken(token1);
        boolean valid2 = JwtUtil.validateToken(token2);
        boolean valid3 = JwtUtil.validateToken(token3);

        System.out.println("Token1 是否有效: " + valid1);
        System.out.println("Token2 是否有效: " + valid2);
        System.out.println("Token2 是否有效: " + valid3);

        // 解析userId
        String userId1 = JwtUtil.parseUserId(token1);
        String userId2 = JwtUtil.parseUserId(token2);
        String userId3 = JwtUtil.parseUserId(token3);

        System.out.println("\n从Token中解析出的userId:");
        System.out.println("Token1 userId: " + userId1);
        System.out.println("Token2 userId: " + userId2);
        System.out.println("Token3 userId: " + userId3);
    }
}